/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Produccion;

/**
 *
 * @author Nadhia
 */
import Controlador.Bean.Log.Log;
import Controlador.Bean.Produccion.Maquina;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
public class ServicioMaquina {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date fecha= new Date();
        String f=sdf.format(fecha);
    public List<Maquina> seleccionarTodo(){
        List<Maquina> data;
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            data = (List)sqlsession.selectList("Data.Produccion.ServicioMaquina.seleccionarTodo");
            sqlsession.close();
        }
        return data;
    }
    
    public List<Maquina> obtenerTipo(){
        List<Maquina> data;
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            data = (List)sqlsession.selectList("Data.Produccion.ServicioMaquina.seleccionarTipo");
            sqlsession.close();
        }
        return data;
    }
    
   public List<Maquina> filtrarMaquinas(String id, String nombre){
        List<Maquina> data;
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            HashMap<String, String> hm = new HashMap<>();
            hm.put("id", "%"+id.toUpperCase()+"%");
            hm.put("nombre", "%"+nombre.toUpperCase()+"%");
            data = (List)sqlsession.selectList("Data.Produccion.ServicioMaquina.filtrarMaquinas", hm);
            sqlsession.close();
        }
        return data;
    }
   
   public void guardar(Maquina maquina)throws Exception{
            SqlSession sqlsession = SessionFac.SessionFactory().openSession();
            maquina.setIdMaquina(obtenerIdSiguiente(maquina.getIdMaquina(), sqlsession));
            sqlsession.insert("Data.Produccion.ServicioMaquina.guardar", maquina);
            sqlsession.commit();
            sqlsession.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"PRMNTMAQ","Guardar máquina",f );
          
        
    }
   public String obtenerIdSiguiente(String IdMaquina, SqlSession sqlsession){
        
        String id= (String)sqlsession.selectOne("Data.Produccion.ServicioMaquina.getNextCodigo");
   
        
        if(id!=null){
        int cod = Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "MAQ000001"; 
        
        }
              
        
        return id;
    }
   
   public void actualizar(Maquina maquina){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            sqlsession.update("Data.Produccion.ServicioMaquina.actualizar", maquina);
            sqlsession.commit();
            sqlsession.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"PRMNTMAQ","Actualizar máquina",f );
        }
    }
   
   public void eliminar(String Id){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            sqlsession.update("Data.Produccion.ServicioMaquina.eliminar", Id);
            sqlsession.commit();
            sqlsession.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"PRMNTMAQ","Eliminar máquina",f );
        }
    }

    List<Maquina> seleccionarHabilitadas() {
               List<Maquina> data;
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            data = (List)sqlsession.selectList("Data.Produccion.ServicioMaquina.seleccionarHabilitadas");
            sqlsession.close();
            
        }
        return data;
    }

   public void HabilitarTodas() throws Exception{
            SqlSession sqlsession = SessionFac.SessionFactory().openSession(); 
            sqlsession.update("Data.Produccion.ServicioMaquina.HabilitarTodas");
            sqlsession.commit();
            sqlsession.close();
    }

    void HabilitarTodas(ArrayList<Maquina> maquinas, int numADesHabHorneado, int numADesHabDecorado, int numADesHabRellenado, int numADesHabEmpaquetado) {
         SqlSession sqlsession = SessionFac.SessionFactory().openSession(); 
            for(int i=0; i<numADesHabHorneado;i++){
            sqlsession.update("Data.Produccion.ServicioMaquina.DeshabilitarHorneado");
            }
            for(int i=0; i<numADesHabDecorado;i++){
            sqlsession.update("Data.Produccion.ServicioMaquina.DeshabilitarDecorado");
            }
            for(int i=0; i<numADesHabRellenado;i++){
            sqlsession.update("Data.Produccion.ServicioMaquina.DeshabilitarRellenado");
            }
            for(int i=0; i<numADesHabEmpaquetado;i++){
            sqlsession.update("Data.Produccion.ServicioMaquina.DeshabilitarEmpaquetado");
            }
            
            sqlsession.commit();
            sqlsession.close();
    }

    String SeleccionarMaximoid() throws Exception{
                String id;
       SqlSession sqlsession = SessionFac.SessionFactory().openSession();
       id = (String)sqlsession.selectOne("Data.Produccion.ServicioMaquina.getNextCodigo");
       sqlsession.close();
       return id;
    }
   
   
   
   
}
